#include "db.h"
#include <QDebug>
#include <QtSql/QSqlDatabase>
#include <QMessageBox>
#include <QtSql/QSqlError>
#include <QSqlQuery>
#include <QStringList>

DB* DB::instance = nullptr;

DB* DB::getInstance()
{
    if (instance == nullptr) {
        instance = new DB();
    }
    return instance;
}
DB::DB(): connectionCounter(0)
{
    // 初始化连接池
    for (int i = 0; i < MAX_CONNECTIONS; ++i) {
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL",QString("Connection_%1").arg(i));
        db.setHostName("localhost");
        db.setDatabaseName("your_database");
        db.setUserName("your_username");
        db.setPassword("your_password");

        if (db.open()) {
            connectionPool.enqueue(db);
        }
    }
}

DB::~DB()
{
    QMutexLocker locker(&mutex);
    // 关闭并移除所有活动连接
    for (const QString& name : activeConnections) {
        {
            QSqlDatabase db = QSqlDatabase::database(name);
            if (db.isOpen()) {
                db.close();
            }
        }
        QSqlDatabase::removeDatabase(name);
    }
}
QString DB::generateConnectionName()
{
    return QString("Connection_%1_%2")
        .arg(reinterpret_cast<quintptr>(QThread::currentThreadId()))
        .arg(++connectionCounter);
}
QSqlDatabase DB::getConnection()
{
    QMutexLocker locker(&mutex);
    QString connectionName = generateConnectionName();
    // 创建新的数据库连接
       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", connectionName);
       db.setHostName("localhost");
       db.setDatabaseName("HospitalCSDB");
       db.setUserName("root");
       db.setPassword("shen5858");

       if (db.open()) {
           activeConnections.insert(connectionName);
           return db;
       }

       // 如果连接失败，移除连接
       QSqlDatabase::removeDatabase(connectionName);
       return QSqlDatabase();
}

void DB::releaseConnection(QSqlDatabase& connection)
{
    QMutexLocker locker(&mutex);
    QString connectionName = connection.connectionName();
    // 先关闭所有查询
    connection.close();

    // 确保没有查询在使用这个连接
    connection = QSqlDatabase(); // 清空连接对象

    // 然后移除连接
    QSqlDatabase::removeDatabase(connectionName);
    activeConnections.remove(connectionName);
}
bool DB::isConnectionValid(const QSqlDatabase& db)
{
    return db.isValid() && db.isOpen();
}
//DB::DB()
//{
//    qDebug()<<QSqlDatabase::drivers();
    //链接数据库

//    threadLocalDatabase.setHostName("127.0.0.1");
//    threadLocalDatabase.setUserName("root");
//    threadLocalDatabase.setPassword("shen5858");
//    threadLocalDatabase.setDatabaseName("HospitalCSDB");
//    if(!threadLocalDatabase.open()){
//        qDebug() << "未成功链接到数据库";
//    }else{
//        qDebug() << "成功链接到数据库";
//    }
//}
//DB::~DB()
//{
//    if (threadLocalDatabase.isOpen())
//        {
//            threadLocalDatabase.close();
//        }
//}

//QStringList DB::getPersonnel(const QString& condition)
//{
//    QString cmd = condition;
//    QSqlQuery db_cursor(threadLocalDatabase);
//    db_cursor.exec(cmd);

//    QStringList result = {};

//    if (db_cursor.size() == -1) {
//        qDebug() << QString("数据表 <table_name> 操作异常，请检查... ");
//        return result;
//    } else if (db_cursor.size() == 0) {
//        qDebug() << QString("数据表 <table_name> 没有数据，请检查... ");
//        return result;
//    } else {
//        while (db_cursor.next()) {
//            QString col0 = db_cursor.value(0).toString();
//            QString col1 = db_cursor.value(1).toString();
//            result << QString("%1 %2").arg(col0, col1);
//        }
//    }

//    return result;
//}

//bool DB::addUser(const QString& role, const QString& username, const QString& password)
//{
//    QSqlQuery db_cursor(threadLocalDatabase);
//    // 构建 SQL 插入语句
//    db_cursor.prepare("INSERT INTO tms (tms_gg, tms_user, tms_password) "
//                      "VALUES (:tms_gg, :tms_user, :tms_password)");

//    // 绑定参数值
//    db_cursor.bindValue(":tms_gg", role);
//    db_cursor.bindValue(":tms_user", username);
//    db_cursor.bindValue(":tms_password", password);

//    // 执行 SQL 语句
//    if (!db_cursor.exec())
//    {
//        // 如果执行失败,输出错误信息
//        qDebug() << "Error adding user:" << db_cursor.lastError().text();
//        return false;
//    }
//    else
//    {
//        // 如果执行成功,输出成功信息
//        qDebug() << "User added successfully.";
//        return true;
//    }
//}
